<html>
<head>
<title>SWIG:Examples:go:variables</title>
</head>

<body bgcolor="#ffffff">

<tt>SWIG/Examples/go/variables/</tt>
<hr>

<H2>Wrapping C Global Variables</H2>

<p>
When a C global variable appears in an interface file, SWIG provides
getter and setter functions for the variable.  The getter function is
named <tt>Get</tt> followed by the capitalized name of the variable.
The setter variable starts with <tt>Set</tt> instead.  The getter
function takes no parameters and returns the value of the variable.
The setter function takes a single parameter with the same type as the
variable, and returns nothing.

<p>Click <a href="example.i">here</a> to see a SWIG interface with
some variable declarations in it.

<h2>Manipulating Variables from Go</h2>

For example, if the package is called <tt>example</tt>, the global
variable

<blockquote>
<pre>
double foo;
</pre>
</blockquote>

will be accessed from Go as
<blockquote>
<pre>
example.GetFoo();
example.SetFoo(12.3);
</pre>
</blockquote>

Click <a href="runme.go">here</a> to see the example program that
updates and prints out the values of the variables using this
technique.

<h2>Key points</h2>

<ul>
<li>The name of the variable is capitalized.
<li>When a global variable has the type "<tt>char *</tt>", SWIG
manages it as a character string.
<li><tt>signed char</tt> and <tt>unsigned char</tt> are handled as
small 8-bit integers.
<li>String array variables such as '<tt>char name[256]</tt>' are
managed as Go strings, but when setting the value, the result is
truncated to the maximum length of the array.  Furthermore, the string
is assumed to be null-terminated.
<li>When structures and classes are used as global variables, they are
mapped into pointers.  Getting the "value" returns a pointer to the
global variable.  Setting the value of a structure results in a memory
copy from a pointer to the global.
</ul>

<h2>Creating read-only variables</h2>

The <tt>%immutable</tt> and <tt>%mutable</tt> directives can be used
to specify a collection of read-only variables.  A read only variable
will have a getter function but no setter function.  For example:

<blockquote>
<pre>
%immutable;
int    status;
double blah;
...
%mutable;
</pre>
</blockquote>

The <tt>%immutable</tt> directive remains in effect until it is
explicitly disabled using the <tt>%mutable</tt> directive.

</body>
</html>
<hr>
